package org.dromara.demo.service;

import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.demo.domain.TestDemo;
import org.dromara.demo.domain.bo.TestDemoBo;
import org.dromara.demo.domain.vo.TestDemoVo;

import java.util.Collection;
import java.util.List;


/**
 * @Author 刘武贵
 * @Date 2024/8/15 22:00
 * @Description 功能描述：测试单表Service接口
 */
public interface ITestDemoService {

    /**
     * 查询单个
     *
     * @param id 需要查询的记录的唯一标识符
     * @return 返回查询到的TestDemoVo对象，如果未找到则返回null
     */
    TestDemoVo queryById(Long id);

    /**
     * 查询列表
     *
     * @param bo TestDemoBo对象，包含查询条件
     * @param pageQuery 分页查询对象，包含分页参数
     * @return 返回TableDataInfo<TestDemoVo>对象，其中包含分页后的测试演示数据
     */
    TableDataInfo<TestDemoVo> queryPageList(TestDemoBo bo, PageQuery pageQuery);

    /**
     * 自定义分页查询
     *
     * @param bo 查询条件对象，用于指定查询的条件和筛选信息
     * @param pageQuery 分页查询对象，用于指定分页的页码和每页大小
     * @return 返回一个包含分页数据信息的对象，其中包括总记录数、当前页码、每页大小和数据列表
     */
    TableDataInfo<TestDemoVo> customPageList(TestDemoBo bo, PageQuery pageQuery);

    /**
     * 查询列表
     * @param bo 查询条件对象，包含查询测试数据所需的参数
     * @return 返回一个包含TestDemoVo对象的列表，这些对象是根据传入的查询条件从数据库中检索到的测试数据
     */
    List<TestDemoVo> queryList(TestDemoBo bo);

    /**
     * 根据新增业务对象插入测试单表
     *
     * @param bo 测试单表新增业务对象
     * @return 插入操作的成败布尔值
     */
    Boolean insertByBo(TestDemoBo bo);

    /**
     * 根据编辑业务对象修改测试单表
     *
     * @param bo 测试单表编辑业务对象
     * @return 如果更新成功，返回 true；否则返回 false
     */
    Boolean updateByBo(TestDemoBo bo);

    /**
     * 校验并删除数据
     *
     * @param ids     主键集合
     * @param isValid 是否校验,true-删除前校验,false-不校验
     * @return 返回值表示删除操作是否成功. true表示成功，false表示失败.
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 批量保存
     *
     * @param list 包含多个TestDemo对象的列表，每个对象代表一条需要保存的数据记录
     * @return 如果所有数据记录都成功保存，则返回true；否则返回false
     */
    Boolean saveBatch(List<TestDemo> list);
}
